<html>
    <head>
        <title>覆盖控制器</title>
    </head>
    <body>
        <script>
            /*
                    五、覆盖控制器

                                                using System.Threading.Tasks;
                                                using Microsoft.Extensions.Logging;
                                                using Volo.Abp.Account;
                                                using Volo.Abp.DependencyInjection;

                                                namespace MyProject.Controllers
                                                {
                                                    [Dependency(ReplaceServices = true)] // 替换默认的AccountController
                                                    [ExposeServices(typeof(AccountController))] // 暴露为AccountController
                                                    public class MyAccountController : AccountController
                                                    {
                                                        public MyAccountController(IAccountAppService accountAppService)
                                                            : base(accountAppService)
                                                        {

                                                        }

                                                        // 添加一个方法
                                                        public async override Task SendPasswordResetCodeAsync(
                                                            SendPasswordResetCodeDto input)
                                                        {
                                                            Logger.LogInformation("Your custom logic...");

                                                            await base.SendPasswordResetCodeAsync(input);
                                                        }
                                                    }
                                                }
                                                    
                                    此示例替换AccountController（在帐户模块中定义的API控制器）并覆盖SendPasswordResetCodeAsync方法。  
                                    
                                    [ExposeServices(typeof(AccountController))]在这里是必不可少的，因为它在依赖注入系统中为AccountController注册此控制器。

                                    [Dependency(ReplaceServices = true)]也建议，清除旧注册（即使ASP.NETCore DI系统选择最后注册的）。

                                    此外，MyAccountController将从ApplicationModel中删除，因为它定义了ExposeServicesAttribute。

                                    如果指定了IncludeSelf = true，即[ExposeServices(typeof(AccountController), IncludeSelf = true)]，则AccountController将被删除。
                                    
                                    这对于扩展控制器很有用。

                                    如果不想删除任一控制器，可以配置AbpAspNetCoreMvcOptions： 
                                    
                                        Configure<AbpAspNetCoreMvcOptions>(options =>
                                        {
                                            options.IgnoredControllersOnModelExclusion
                                                .AddIfNotContains(typeof(MyAccountController));
                                        });
                */
        </script>
    </body>
</html>